package com.vhall.component.controller.redpacket.facade;

import com.vhall.component.entity.rebroadcast.RedPacketRecordEntity;
import com.vhall.component.entity.redpacket.vo.*;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;

import java.util.List;

/**
 * @author yongzheng.xu
 * @date 2021/7/8 20:00
 */
@FeignClient(value = "RedPacketFacade", path = "/v4/redpacket")
public interface RedPacketFacade {

    /**
     * 发红包
     *
     * @param vo 参数
     * @return 返回值
     */
    @PostMapping("/create")
    RedPacketCreateRspVO create(@Validated RedPacketCreateReqVO vo);

    /**
     * 加入抽奖
     *
     * @param reqVO
     * @return
     */
    @PostMapping("/join")
    RedPacketJoinRspVO join(@Validated RedPacketJoinVO reqVO);

    /**
     * 抢红包
     *
     * @param vo 参数
     * @return 返回值
     */
    @PostMapping("/get")
    RedPacketGetRspVO get(@Validated RedPacketJoinVO vo);

    /**
     * 获取用户抢到的单个红包信息
     *
     * @param vo 参数
     * @return 返回值
     */
    @GetMapping("/get-my-info")
    RedPacketGetMyInfoRspVO getMyInfo(@Validated RedPacketGetMyInfoReqVO vo);

    /**
     * 获取房间内最新的一个红包信息
     *
     * @param vo 参数
     * @return 返回值
     */
    @GetMapping("/get-last-info")
    RedPacketGetLastInfoRspVO getLastInfo(@Validated RedPacketGetLastInfoReqVO vo);

    /**
     * 获取红包的领取记录列表
     *
     * @param vo 参数
     * @return 返回值
     */
    @GetMapping("/records-get")
    RedPacketGetRecordsRspVO getRecords(@Validated RedPacketGetRecordsReqVO vo);

    /**
     * 获取红包列表
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/get-list")
    GetListRspVO list(@Validated GetListReqVO reqVO);

    /**
     * 获取红包详细信息
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/get-info")
    RedPacketVO info(@Validated ReqVo reqVO);

    /**
     * 获取红包状态
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/get-stat")
    RedPacketStatRspVO stat(@Validated RedPacketStatReqVO reqVO);

    /**
     * 获取红包记录
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/get-record")
    RedPacketRecordEntity record(@Validated RedPacketRecordReqVO reqVO);

    /**
     * 获取红包记录
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/get-records")
    RedPacketRecordsRspVO records(@Validated RedPacketRecordsReqVO reqVO);


    /**
     * 根据业务ID获取当前未结束的红包信息接口 (有效时间内)
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/get-info-by-source-id")
    RedPacketVO getInfoBySourceId(@Validated OverBySourceIdReqVO reqVO);

    /**
     * 结束抽奖
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/over-by-source-id")
    List<RedPacketVO> overBySourceId(OverBySourceIdReqVO reqVO);

    /**
     * 红包解锁
     *
     * @param reqVO 参数
     * @return 返回值
     */
    @PostMapping("/unlock")
    Boolean unlock(@Validated RedPacketUnLockReqVO reqVO);

}
